package com.zy.explore.db.infrastructure.plugins.multidbsupport.sqlchange.function;

import java.util.ArrayList;
import java.util.List;

/**
 * 神通数据库
 * @author xiayd
 *
 */
public class OscarFunChangeFactory extends AbstractFunChangeFactory {
	
	public OscarFunChangeFactory(){
		//兼容oracle:添加oracle中的转换方法
		AbstractFunChangeFactory funChangeFactory = new MysqlToOracleFunChangeFactory();
		this.addAll(funChangeFactory.getAll());
		//忽略concat函数
		map.remove("concat");
		
		init();
	}
	
	private void init(){
		//TRUNC(NUMBER)表示截断数字，TRUNC(date)表示截断日期
		add("trunc",fun->{
			return merge("days",fun.getArgList());
		});
//		add("group_concat",fun->{//神通数据库只支持一个参数，并且不支持分割符号
//			String arg0 = fun.getArgList().get(0);
//			
//			int idx = arg0.indexOf(" separator ");
//			if(idx > -1){
//				fun.getArgList().set(0, arg0.substring(0,idx));
//			}
//			
//			return merge("group_concat",fun.getArgList());
//		});
		//返回两个日期之间的天数
		add("datediff",fun->{
			List<String> argList = new ArrayList<>();
			// field名称 对应的数字 对应的名称
			// 微秒       0 millisecond、ms
			// 秒         1 second、ss、s
			// 分         2 minute、mi、n
			// 小时 		 3 hour、hh
			// 天         4 day、dd、d
			// 星期       5 week、wk、ww
			// 月         6 month、mm、m
			// 季度       7 quarter、qq
			// 年         8 year、yy、yyyy
			// 天
			argList.add("4");
			argList.addAll(fun.getArgList());
			return merge("datediff",argList);
		});
		
	}
	
}
